#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <string.h>
#include <unistd.h>

typedef struct {
    float accel_x;    // 加速度 X（g）
    float accel_y;    // 加速度 Y（g）
    float accel_z;    // 加速度 Z（g）
    float gyro_x;     // 角速度 X（度/秒）
    float gyro_y;     // 角速度 Y（度/秒）
    float gyro_z;     // 角速度 Z（度/秒）
    long pts;          // 时间戳
} IMUData;

// 获取当前时间的 PTS
long get_current_pts() {
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (tv.tv_sec * 1000) + (tv.tv_usec / 1000); // 转换为毫秒
}

// 模拟获取 IMU 数据
IMUData get_imu_data() {
    IMUData data;
    data.accel_x = (float)(rand() % 100) / 10.0;
    data.accel_y = (float)(rand() % 100) / 10.0;
    data.accel_z = (float)(rand() % 100) / 10.0;

    data.gyro_x = (float)(rand() % 100) / 10.0; // 随机生成 X 轴数据
    data.gyro_y = (float)(rand() % 100) / 10.0; // 随机生成 Y 轴数据
    data.gyro_z = (float)(rand() % 100) / 10.0; // 随机生成 Z 轴数据
    data.pts = get_current_pts(); // 获取当前时间戳
    return data;
}

int main() {
    // 模拟获取 IMU 数据并打印
    char imu_data[256]; // 根据需要调整大小


    for (int i = 0; i < 10; i++) {
        IMUData data = get_imu_data();
        sprintf(imu_data, "AX: %.2f, AY: %.2f, AZ: %.2f, GX: %.2f, GY: %.2f, GZ: %.2f, PTS: %ld",
           data.accel_x, data.accel_y, data.accel_z,data.gyro_x, data.gyro_y, data.gyro_z, data.pts);
        //printf("IMU Data: AX: %.2f, AY: %.2f, AZ: %.2f, GX: %.2f, GY: %.2f, GZ: %.2f,PTS: %ld\n", data.accel_x, data.accel_y, data.accel_z,data.gyro_x, data.gyro_y, data.gyro_z, data.pts);
         // 计算各个数据类型的字节数
        //size_t total_bytes = sizeof(data.accel_x) + sizeof(AY) + sizeof(AZ) +
        //                 sizeof(GX) + sizeof(GY) + sizeof(GZ) +
        //                 sizeof(PTS);

        // 计算字符串的总字节数
        //size_t total_bytes = sizeof(imu_data) + strlen(imu_data) + 1; // +1 for null terminator
        size_t total_bytes_len = strlen(imu_data) + 1; // +1 for null terminator
    // 输出字符串和总字节数
        printf("IMU Data: %s\n", imu_data);
        //printf("Total bytes (including string): %zu\n", total_bytes);
        printf("Total bytes (including string): %zu\n", total_bytes_len);
        usleep(100000); // 暂停 100 毫秒
    }
    return 0;
} 

/*
    编译
    gcc imu_with_pts.c -o imu_with_pts
*/